向量算术

在3.7.1节里描述的 vector 的设计是为了作为一种保存值的一般性机制,那里追求的是灵活性,以及能融入容器、迭代器和算法的体系结构之中。但是它并不支持数学的向量运算。将这些运算添加到 vector 上并不难,但是它的一般性和灵活性会妨碍优化,而优化对于所有重要的数值工作都是最基本的东西。由于这一情况,标准库提供了一种称为 valarray 的向量。它不那么通用,但却更容易适应数值计算的优化

    template<class T> class valarray
    {
        // ...
        T& operator[](size_t);
        // ...
    };

类型 size_t 是实现中用于表示数组下标的无符号整数类型。

这里也支持 valarray 的常规算术运算和最常用的数学函数。例如,

    // 取自<valarray>的标准的绝对值函数
    template<class T> valarray<T> abs(const valarray<T>&);

    void f(valarray<double>& al, valarray<double>& a2)
    {
        valarray<double> a = a1 * 3.14 + a2/a1;
        a2 += a1 * 3.14;
        a = abs(a);
        double d = a2[7];
        // ...
    }

更多的细节见22.4节

🔚